package com.glela.goods.mapper;

import com.glela.goods.model.Inventory;
import com.glela.goods.model.InventorySync;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface InventoryMapper {

	Long insertSelective(Inventory inventory);

	Long insert(Inventory inventory);

	public Inventory selectByPrimaryKey(Long id);

	/**
	 * <dl>
	 * <dt>分时抢购商品库存（取分时抢购商品限购数与实际库存最小值累加）</dt>
	 * </dl>
	 * @param limitTimeSaleId 分时抢购ID
	 * @param goodsId 商品ID
	 * @return Long 库存数
	 * @author zls
	 * @date 2017年8月1日 上午10:42:55
	 */
	Long selectLimitSaleInventoryByGoodsId(@Param("limitTimeSaleId") int limitTimeSaleId, @Param("goodsId") long goodsId);

	/**
	 * <dl>
	 * <dt>批量查询分时抢购下商品总库存</dt>
	 * </dl>
	 * @param limitSaleGoodsIdMap key:分时抢购ID，value:分时抢购下的商品ID集合
	 * @return List<Map<String,Object>>
	 * @author zls
	 * @date 2017年8月1日 下午5:15:31
	 */
	List<Map<String, Object>> selectLimitSaleInventoryByGoodsIds(@Param("limitSaleGoodsIdMap") Map<Integer, Set<Long>> limitSaleGoodsIdMap);

	/**
	 * <dl>
	 * <dt>查询库存记录</dt>
	 * </dl>
	 * @param goodsId 商品ID
	 * @param status 库存状态
	 * @return List<Inventory>
	 * @author zls
	 * @date 2017年8月3日 下午2:51:01
	 */
	List<Inventory> selectByGoodsId(@Param("goodsId") long goodsId, @Param("status") Integer status);

	/**
	 * <dl>
	 * <dt>批量查询商品库存信息</dt>
	 * </dl>
	 * @param goodsIds 商品ID集合
	 * @param status 库存状态0：禁用；1：可用
	 * @return List<Inventory>
	 * @author zls
	 * @date 2017年8月3日 下午6:18:18
	 */
	public List<Inventory> selectByGoodsIds(@Param("goodsIds") Collection<Long> goodsIds, @Param("status") int status);

	/**
	 * 根据商品id查询这个商品库存中最低价
	 * 
	 * @param goodId
	 * @return
	 */
	public int selectMinInventorySalePriceByGoodId(long goodId);

	/**
	 * 根据货品id查询这个货品库存中最低价
	 * 
	 * @param productId
	 * @return
	 */
	public Inventory selectInventoryByProductId(long productId);

	public Inventory selectInventoryByPid(long productId);

	public Inventory selectAllInventoryByProductId(long productId);

	public Inventory selectInventoryByGoodsStoreIdSpecInfo(@Param("goodsId") long goodsId, @Param("storeId") int storeId, @Param("specInfo") String specInfo);

	/** MaoZeYao **/
	/**
	 * 归还库存
	 * 
	 * @param inventoryId 库存ID
	 * @param quantity 数量
	 * @return
	 */
	public int updateReturnTheInventory(@Param("inventoryId") Long inventoryId, @Param("quantity") Integer quantity);

	/**
	 * MaoZeYao
	 * 
	 * @return
	 **/

	public int updateLocalInventory(@Param("inventoryId") long inventoryId, @Param("availableQty") int availableQty);

	public List<Inventory> selectInventoryEntityByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);

	/**
	 * 查询有库存的商品id集合(校妆APP)
	 * 
	 * @author 卫耀华
	 * @param goodsIdList
	 * @return
	 */
	public List<Long> selectHasInventoryGoodsIds(@Param("goodsIdList") List<Long> goodsIdList);

	public int selectInventoryByGoodsId(long goodsId);

	public List<Long> selectHasInventoryGoodsIdList();

	public List<InventorySync> selectAutoSyncInventoryByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);

	/**
	 * <dl>
	 * <dt>批量查询库存</dt>
	 * </dl>
	 * @param inventoryIds
	 * @return List<Inventory>
	 * @author zls
	 * @date 2018年1月4日 下午5:10:25
	 */
	List<Inventory> selectByIds(@Param("inventoryIds") Collection<Long> inventoryIds);
	/**
	 * @Description: 根据主键更新库存中商品价格
	 * @Author: zhangrenjie
	 * @Date: 2018/2/1 15:22
	 *
	 */
	public void updateByPrimaryKeySelective(Inventory bean);


    public void insertSelectiveBatch(@Param("inventorysNewList") List<Inventory> inventorysNewList);
}
